home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / Source / Xpicw.s < prev   
Encoding:
Text File  |  1999-12-05  |  39.2 KB  |  2,107 lines

  1. *    Xpicw.s
  2.  
  3.     .include    DOSCALL.MAC
  4.     .include    IOCSCALL.MAC
  5.     .include    Xpicw.INC
  6.     .include    SYS_FPIC.mac
  7.  
  8.     .xref    _Fpic_keep,_Fpic_disp,_Fpic_free,_Fpic_set_buf
  9.     .xref    load_text,wl_load
  10.  
  11.  
  12.     .offset    8        * 引き数
  13. _source_ptr:    .ds.l    1
  14. _dest_ptr:    .ds.l    1
  15. _speed:        .ds.l    1
  16.  
  17.  
  18. GRAY0    equ    4<<11+4<<6+4<<1
  19. GRAY1    equ    16<<11+16<<6+16<<1
  20.  
  21.  
  22. CSRSWITCH    equ    $000992    *b カーソル表示スイッチ(<>0で表示)
  23.  
  24. GVRAM        equ    $c0_0000
  25. TEXTVRAM    equ    $e0_0000
  26.  
  27. CRTC_R00    equ    $e8_0000
  28. CRTC_R01    equ    $e8_0002
  29. CRTC_R02    equ    $e8_0004
  30. CRTC_R12    equ    $e8_0018
  31. CRTC_R20    equ    $e8_0028
  32. CRTC_R21    equ    $e8_002a
  33. CRTC_R22    equ    $e8_002c
  34.  
  35. GRPALET        equ    $e8_2000
  36. VCTRL_R01    equ    $e8_2400
  37. VCTRL_R02    equ    $e8_2500
  38. VCTRL_R03    equ    $e8_2600
  39. CRTC_PORT    equ    $e8_0480    * CRTC 動作設定ポート
  40. GPIP_DATA    equ    $e8_8001
  41.  
  42.  
  43. ZMUSIC    .macro    func
  44.     moveq.l    #func,d1
  45.     trap    #3
  46.     .endm
  47.  
  48. picture_sync    equ    $43
  49. get_play_work    equ    $3c
  50.  
  51. p_total        equ    $3c    * ステップタイム合計 (.L)
  52.  
  53.  
  54.  
  55.  
  56.     .text
  57.     .even
  58.  
  59.     bra.s    @f
  60.     .dc.b    '#HUPAIR',0
  61. @@:
  62.     clr.l    a5
  63.  
  64.  
  65.     lea.l    $10(a0),a0    *メモリブロックの変更
  66.     suba.l    a0,a1
  67.     pea.l    (a1)
  68.     pea.l    (a0)
  69.     DOS    _SETBLOCK
  70.     addq.w    #8,sp
  71.  
  72.  
  73.     move.l    #WORKSIZE+STACKSIZE,-(sp)
  74.     DOS    _MALLOC
  75.     addq.w    #4,sp
  76.     tst.l    d0
  77.     bmi    less_mem_err
  78.     movea.l    d0,a5        * a5.l = ワーク(以後変更無し)
  79.     lea.l    WORKSIZE+STACKSIZE(a5),sp
  80.  
  81.             * ワークをクリア
  82.     movea.l    a5,a0
  83.     move.w    #WORKSIZE/4-1,d0
  84.     moveq.l    #0,d1
  85. @@:    move.l    d1,(a0)+
  86.     dbra    d0,@b
  87.  
  88.     move.l    sp,tini_usp(a5)    * エラー時にスタックを一気に戻すため
  89.  
  90.  
  91. *********************************************************
  92. INIT:
  93.     lea.l    CSRSWITCH,a1
  94.     IOCS    _B_WPEEK
  95.     move.w    d0,old_csrswitch(a5)    * カーソルの表示モードを取得
  96.  
  97.     IOCS    _OS_CUROF    * カーソル表示一時停止
  98.  
  99.     move.w    #3,-(sp)    * ファンクションキー表示オフ
  100.     move.w    #14,-(sp)
  101.     DOS    _CONCTRL
  102.     addq.w    #4,sp
  103.  
  104.     moveq.l    #0,d1
  105.     IOCS    _SKEY_MOD
  106.  
  107.     clr.w    -(sp)
  108.     DOS    _KFLUSH
  109.     addq.w    #2,sp
  110.  
  111.  
  112.     moveq.l    #0,d1        * グラフィック画面が
  113.     moveq.l    #-1,d2        * 使用中かチェック
  114.     IOCS    _TGUSEMD
  115.     cmpi.b    #1,d0        * システムで使用中か?
  116.     beq    tgusemd_err
  117.     cmpi.b    #2,d0        * アプリケーションで使用中か?
  118.     beq    tgusemd_err
  119.  
  120.             * 環境変数 SLASH を取得
  121.     link    a6,#-256
  122.     pea.l    -256(a6)
  123.     clr.l    -(sp)
  124.     pea.l    SLASH_strZ(pc)
  125.     DOS    _GETENV
  126.     lea.l    12(sp),sp
  127.     tst.l    d0
  128.     bmi    INIT_no_slash
  129.     cmpi.b    #'/',-256(a6)    * 環境変数 SLASH=/ なら
  130.     seq.b    slash_flag(a5)    * フラグをセット
  131. INIT_no_slash:
  132.     unlk    a6
  133.  
  134.  
  135.     tst.b    (a2)+
  136.     beq    usage
  137.  
  138.     st.b    init_screen_1st_flag(a5)
  139.     sf.b    crlf_flag(a5)
  140.  
  141. *********************************************************
  142. analyse_cmdline:        * コマンドラインの解析
  143.                 * インダイレクトファイルと COMMAND.X と HUPAIR を両立させるため
  144.                 * ややこしい事になってます…
  145.                 * in  : a2.l = コマンドライン
  146. analyse_cmdline_loop:
  147.     move.b    (a2)+,d0
  148.     beq    analyse_cmdline_next
  149.     cmpi.b    #$1a,d0
  150.     beq    analyse_cmdline_crlf
  151.     cmpi.b    #$0d,d0
  152.     beq    analyse_cmdline_crlf
  153.     cmpi.b    #$0a,d0
  154.     beq    analyse_cmdline_crlf
  155.     cmpi.b    #' ',d0
  156.     beq    analyse_cmdline_loop
  157.     cmpi.b    #$09,d0
  158.     beq    analyse_cmdline_loop
  159.     cmpi.b    #'-',d0
  160.     beq    analyse_cmdline_option
  161.     tst.b    slash_flag(a5)        * 環境変数 SLASH=/ なら
  162.     bne    analyse_cmdline_fname    * / はパス区切り記号
  163.     cmpi.b    #'/',d0
  164.     beq    analyse_cmdline_option
  165.     bra    analyse_cmdline_fname
  166.  
  167. analyse_cmdline_crlf:
  168.     st.b    crlf_flag(a5)
  169.  
  170. analyse_cmdline_next:
  171.     tst.b    C_option_flag2(a5)    * -C オプションのみ( .PIC ファイル名無し)に対処
  172.     beq    1f
  173.     sf.b    C_option_flag2(a5)
  174.     bra    2f
  175. 1:
  176.     tst.b    A_option_flag(a5)    * -A オプションのみ( .PIC ファイル名無し)に対処
  177.     beq    3f
  178. 2:
  179.     movem.l    d1-d7/a1-a6,-(sp)    **
  180.     bsr    disp            * 表示
  181.     movem.l    (sp)+,d1-d7/a1-a6    **
  182. 3:
  183.  
  184.     tst.b    crlf_flag(a5)
  185.     beq    @f
  186.  
  187.     sf.b    crlf_flag(a5)
  188.     clr.l    wl_ptr(a5)
  189.     clr.l    wl_entry(a5)
  190.     clr.l    clear_wl_ptr(a5)
  191.     clr.l    clear_wl_entry(a5)
  192.     clr.l    speed(a5)
  193.     clr.l    clear_speed(a5)
  194.     clr.l    S_option_speed(a5)
  195.     clr.l    D_option_speed(a5)
  196.     clr.b    wl_fname(a5)
  197.     clr.b    clear_wl_fname(a5)
  198.     sf.b    C_option_flag(a5)
  199.     sf.b    L_option_flag(a5)
  200.     sf.b    M_option_flag(a5)
  201.     sf.b    K_option_flag(a5)
  202.     sf.b    Y_option_flag(a5)
  203.     sf.b    CR_option_flag(a5)
  204.     sf.b    WR_option_flag(a5)
  205.     sf.b    square_flag(a5)
  206.     sf.b    C_option_flag2(a5)
  207.     sf.b    A_option_flag(a5)
  208.     sf.b    F_option_flag(a5)
  209.     clr.l    time0(a5)
  210.     clr.l    time1(a5)
  211.     clr.w    zm_track(a5)
  212.     clr.l    zm_track_work(a5)
  213.     clr.l    zm_counter(a5)
  214. @@:
  215.     move.b    -1(a2),d0
  216.     beq    analyse_cmdline_rts
  217.     cmpi.b    #$1a,d0
  218.     bne    analyse_cmdline_loop
  219.  
  220.  
  221. analyse_cmdline_rts:
  222.     bra    TINI
  223.  
  224.  
  225.  
  226. analyse_cmdline_fname:
  227.     lea.l    pic_fname(a5),a0    * ファイル名を
  228.     subq.w    #1,a2            * コピー
  229.     bsr    copy_str
  230.  
  231.     pea.l    nameck_buf(a5)
  232.     pea.l    pic_fname(a5)
  233.     DOS    _NAMECK
  234.     addq.w    #8,sp
  235.     tst.l    d0
  236.     bmi    cannot_read_err
  237.     beq    @f
  238.     st.b    wildcard_flag(a5)    * ワイルドカード実行中フラグ
  239. @@:
  240.     move.w    #32,-(sp)    * 通常ファイル
  241.     pea.l    pic_fname(a5)
  242.     pea.l    files_buf(a5)
  243.     DOS    _FILES
  244.     lea.l    10(sp),sp
  245.     tst.l    d0
  246.     bpl    analyse_cmdline_fname_found
  247.  
  248.  
  249. .if    0
  250.             * '.PIC' を付けてもう一度捜す
  251.     lea.l    pic_fname(a5),a0
  252. @@:    tst.b    (a0)+
  253.     bne    @b
  254.     move.b    #'.',-1(a0)
  255.     move.b    #'P',(a0)+
  256.     move.b    #'I',(a0)+
  257.     move.b    #'C',(a0)+
  258.     clr.b    (a0)+
  259.  
  260.     move.w    #32,-(sp)    * 通常ファイル
  261.     pea.l    pic_fname(a5)
  262.     pea.l    files_buf(a5)
  263.     DOS    _FILES
  264.     lea.l    10(sp),sp
  265.     tst.l    d0
  266.     bmi    cannot_read_err
  267. .endif
  268. analyse_cmdline_fname_found:
  269.  
  270.  
  271. analyse_cmdline_fname_wildcard_loop:
  272.  
  273.     movem.l    d1-d7/a1-a6,-(sp)    **
  274.  
  275.     lea.l    pic_fname(a5),a0    * パス名を
  276.     lea.l    nameck_buf(a5),a2    * コピー
  277.     bsr    copy_str
  278.     lea.l    files_buf+30(a5),a2    * ファイル名をコピー
  279.     bsr    copy_str
  280.  
  281.             * 拡張子によって file_type(a5) を設定
  282.     lea.l    nameck_buf+$56(a5),a0    * a0.l = 拡張子
  283.     cmpi.b    #'.',(a0)+
  284.     bne    3f
  285.     cmpi.b    #'G',(a0)
  286.     beq    1f
  287.     cmpi.b    #'g',(a0)
  288.     bne    3f
  289. 1:    addq.w    #1,a0
  290.     cmpi.b    #'L',(a0)
  291.     beq    2f
  292.     cmpi.b    #'l',(a0)
  293.     bne    3f
  294. 2:    addq.w    #1,a0
  295.     cmpi.b    #'3',(a0)
  296.     bne    3f
  297.     st.b    file_type(a5)        * .GL3
  298.     bra    4f
  299.  
  300. 3:    sf.b    file_type(a5)        * .PIC
  301. 4:
  302.     bsr    disp            * 表示
  303.  
  304.     movem.l    (sp)+,d1-d7/a1-a6    **
  305.  
  306.     bmi    analyse_cmdline_rts
  307.  
  308.     tst.b    wildcard_flag(a5)
  309.     beq    @f
  310.  
  311.     pea.l    files_buf(a5)
  312.     DOS    _NFILES
  313.     addq.w    #4,sp
  314.     tst.l    d0
  315.     bpl    analyse_cmdline_fname_wildcard_loop
  316. @@:
  317.             * ワークを初期化
  318.     clr.b    pic_fname(a5)
  319.     sf.b    wildcard_flag(a5)
  320.     clr.b    nameck_buf(a5)
  321.     clr.b    files_buf+30(a5)
  322.     clr.w    pos_x(a5)
  323.     clr.w    pos_y(a5)
  324.     sf.b    A_option_flag(a5)
  325.     sf.b    F_option_flag(a5)
  326.  
  327.     bra    analyse_cmdline_next
  328.  
  329.  
  330. analyse_cmdline_option:
  331.     move.b    (a2)+,d0
  332.     beq    usage
  333.     andi.b    #$df,d0
  334.     cmpi.b    #'W',d0
  335.     beq    W_option
  336.     cmpi.b    #'C',d0
  337.     beq    C_option
  338.     cmpi.b    #'S',d0
  339.     beq    S_option
  340.     cmpi.b    #'D',d0
  341.     beq    D_option
  342.     cmpi.b    #'M',d0
  343.     beq    M_option
  344.     cmpi.b    #'L',d0
  345.     beq    L_option
  346.     cmpi.b    #'I',d0
  347.     beq    I_option
  348.     cmpi.b    #'K',d0
  349.     beq    K_option
  350.     cmpi.b    #'T',d0
  351.     beq    T_option
  352.     cmpi.b    #'Z',d0
  353.     beq    Z_option
  354.     cmpi.b    #'Y',d0
  355.     beq    Y_option
  356.     cmpi.b    #'A',d0
  357.     beq    A_option
  358.     cmpi.b    #'N',d0
  359.     beq    N_option
  360.     cmpi.b    #'F',d0
  361.     beq    F_option
  362.     bra    usage
  363.  
  364.  
  365. W_option:
  366.     move.b    (a2),d0
  367.     beq    usage
  368.     cmpi.b    #'r',d0
  369.     beq    W_option_r
  370.     cmpi.b    #'R',d0
  371.     bne    W_option_fname
  372. W_option_r:
  373.     move.b    1(a2),d0
  374.     beq    W_option_random
  375.     cmpi.b    #' ',d0
  376.     beq    W_option_random
  377.     cmpi.b    #$09,d0
  378.     bne    W_option_fname        * R で始まるファイル名だった
  379. W_option_random:
  380.     addq.w    #1,a2
  381.     st.b    WR_option_flag(a5)
  382.     bra    analyse_cmdline_loop
  383. W_option_fname:        * -Wfilename の時
  384.     lea.l    wl_fname(a5),a0    * .wl ファイル名をコピー
  385.     bsr    copy_str
  386.     bra    analyse_cmdline_loop
  387.  
  388.  
  389. C_option:
  390.     st.b    C_option_flag(a5)
  391.     st.b    C_option_flag2(a5)
  392.                 * -C の後にファイル名が有るか?
  393.     move.b    (a2),d0
  394.     beq    analyse_cmdline_loop
  395.     cmpi.b    #' ',d0
  396.     beq    analyse_cmdline_loop
  397.     cmpi.b    #$09,d0
  398.     beq    analyse_cmdline_loop
  399.     cmpi.b    #$0d,d0
  400.     beq    analyse_cmdline_loop
  401.     cmpi.b    #$0a,d0
  402.     beq    analyse_cmdline_loop
  403.     cmpi.b    #$1a,d0
  404.     beq    analyse_cmdline_loop
  405.                 * -CR か?
  406.     cmpi.b    #'r',d0
  407.     beq    C_option_r
  408.     cmpi.b    #'R',d0
  409.     bne    C_option_fname
  410. C_option_r:
  411.     move.b    1(a2),d0
  412.     beq    C_option_random
  413.     cmpi.b    #' ',d0
  414.     beq    C_option_random
  415.     cmpi.b    #$09,d0
  416.     beq    C_option_random
  417.     cmpi.b    #$0d,d0
  418.     beq    C_option_random
  419.     cmpi.b    #$0a,d0
  420.     beq    C_option_random
  421.     cmpi.b    #$1a,d0
  422.     bne    C_option_fname        * R で始まるファイル名だった
  423. C_option_random:
  424.     addq.w    #1,a2
  425.     st.b    CR_option_flag(a5)
  426.     bra    analyse_cmdline_loop
  427. C_option_fname:
  428.     lea.l    clear_wl_fname(a5),a0    * .wl ファイル名をコピー
  429.     bsr    copy_str
  430.     bra    analyse_cmdline_loop
  431.  
  432.  
  433. S_option:
  434.     bsr    dec_to_bin
  435.     move.l    d0,S_option_speed(a5)
  436.     bra    analyse_cmdline_loop
  437.  
  438.  
  439. D_option:
  440.     bsr    dec_to_bin
  441.     move.l    d0,D_option_speed(a5)
  442.     bra    analyse_cmdline_loop
  443.  
  444.  
  445. L_option:
  446.     st.b    L_option_flag(a5)
  447.     bsr    dec_to_bin
  448.     move.w    d0,pos_x(a5)
  449.     moveq.l    #0,d0
  450.     cmpi.b    #',',(a2)
  451.     bne    @f
  452.     addq.w    #1,a2
  453.     bsr    dec_to_bin
  454. @@:    move.w    d0,pos_y(a5)
  455.     bra    analyse_cmdline_loop
  456.  
  457.  
  458. M_option:
  459.     st.b    M_option_flag(a5)
  460.     bra    analyse_cmdline_loop
  461.  
  462.  
  463. I_option:
  464.     lea.l    indirect_fname(a5),a0    * インダイレクトファイル名をコピー
  465.     bsr    copy_str
  466.  
  467.     pea.l    indirect_fname(a5)
  468.     bsr    load_text
  469.     addq.w    #4,sp
  470.     tst.l    d0
  471.     bmi    indirect_err
  472.     movea.l    a0,a2            * ここから a2.l はインダイレクトファイル中を指す
  473.     bra    analyse_cmdline_loop
  474.  
  475.  
  476. K_option:
  477.     st.b    K_option_flag(a5)
  478.     bra    analyse_cmdline_loop
  479.  
  480.  
  481. T_option:
  482.     bsr    fdec_to_bin
  483.     move.l    d0,time0(a5)
  484.     cmpi.b    #',',(a2)
  485.     bne    analyse_cmdline_loop
  486.     addq.w    #1,a2
  487.     bsr    fdec_to_bin
  488.     move.l    d0,time1(a5)
  489.     bra    analyse_cmdline_loop
  490.  
  491.  
  492. Z_option:        * -Z[num0],[num1]
  493.     bsr    dec_to_bin
  494.     tst.w    d0
  495.     bne    @f
  496.     moveq.l    #1,d0
  497. @@:    move.w    d0,zm_track(a5)
  498.     cmpi.b    #',',(a2)
  499.     bne    analyse_cmdline_loop
  500.     addq.w    #1,a2
  501.     bsr    dec_to_bin
  502.     move.l    d0,zm_counter(a5)
  503.  
  504.     bsr    check_zmusic
  505.     tst.l    d0
  506.     bne    no_zmusic_err    * zmusic が常駐していない
  507.  
  508.     move.w    zm_track(a5),d2    * 指定トラックの
  509.     ZMUSIC    get_play_work    * ワークを取得
  510.     move.l    a0,zm_track_work(a5)
  511.  
  512.     bra    analyse_cmdline_loop
  513. no_zmusic_err:
  514.     moveq.l    #16,d0
  515.     lea.l    no_zmusic_err_strZ(pc),a0
  516.     bra    TINI_err
  517.  
  518.  
  519. check_zmusic:        * zmusic 常駐チェック
  520.             * out d0.l = 0 : 常駐確認
  521.             *       < 0 : 常駐していない
  522.     movem.l    d7/a1,-(sp)
  523.  
  524.     suba.l    a1,a1
  525.     IOCS    _B_SUPER    **
  526.     move.l    d0,a1
  527.  
  528.     move.l  $8c.w,a0
  529.     subq.w  #8,a0
  530.     cmpi.l  #'ZmuS',(a0)+
  531.     bne     check_zmusic_err
  532.     cmpi.w  #'iC',(a0)+
  533.     bne     check_zmusic_err
  534.     moveq.l #0,d7
  535. check_zmusic_rts:
  536.     IOCS    _B_SUPER    **
  537.     move.l    d7,d0
  538.     movem.l    (sp)+,d7/a1
  539.     rts
  540.  
  541. check_zmusic_err:
  542.     moveq.l #-1,d7
  543.     bra    check_zmusic_rts
  544.  
  545.  
  546. Y_option:
  547.     st.b    Y_option_flag(a5)
  548.     bra    analyse_cmdline_loop
  549.  
  550.  
  551. A_option:
  552.     st.b    A_option_flag(a5)
  553.     bra    analyse_cmdline_next
  554.  
  555.  
  556. N_option:
  557.     st.b    N_option_flag(a5)
  558.     bra    analyse_cmdline_loop
  559.  
  560.  
  561. F_option:
  562.     st.b    F_option_flag(a5)
  563.     bsr    dec_to_bin
  564.     tst.b    d0
  565.     beq    @f
  566.     moveq.l    #-1,d0
  567. @@:    move.b    d0,F_option_mode(a5)
  568.     bra    analyse_cmdline_loop
  569.  
  570.  
  571.  
  572. *********************************************************
  573. TINI:
  574.     move.l    a5,d0
  575.     beq    TINI_no_a5
  576.  
  577.     movea.l    tini_usp(a5),sp    * スタックを一気に戻す
  578.  
  579.     move.l    wl_ptr(a5),-(sp)
  580.     beq    @f
  581.     DOS    _MFREE
  582. @@:    addq.w    #4,sp
  583.  
  584.  
  585.     move.l    clear_wl_ptr(a5),-(sp)
  586.     beq    @f
  587.     DOS    _MFREE
  588. @@:    addq.w    #4,sp
  589.  
  590.     move.l    virtual_gvram(a5),-(sp)
  591.     beq    @f
  592.     DOS    _MFREE
  593. @@:    addq.w    #4,sp
  594.  
  595.     tst.b    old_csrswitch(a5)
  596.     beq    @f
  597.     tst.b    N_option_flag(a5)
  598.     bne    @f
  599.     IOCS    _OS_CURON
  600. @@:
  601.  
  602.  
  603.     IOCS    _MS_CUROF
  604.     moveq.l    #-1,d1
  605.     IOCS    _SKEY_MOD
  606.     moveq.l    #0,d1
  607.     IOCS    _MS_SEL
  608.  
  609.     clr.w    -(sp)
  610.     DOS    _KFLUSH
  611.     addq.w    #2,sp
  612.  
  613. TINI_no_a5:
  614.     move.w    exit_code(pc),-(sp)
  615.     beq    TINI_success
  616.  
  617.     move.l    err_message(pc),-(sp)
  618.     DOS    _PRINT
  619.     addq.w    #4,sp
  620.     bra    TINI_exit
  621.  
  622. TINI_success:            * 正常終了の場合、カーソルを最下段に
  623.     move.w    #31,-(sp)    * Y
  624.     move.w    #0,-(sp)    * X
  625.     move.w    #3,-(sp)
  626.     DOS    _CONCTRL
  627.     addq.w    #6,sp
  628.  
  629. TINI_exit:
  630.     pea.l    (a5)
  631.     beq    @f
  632.     DOS    _MFREE
  633. @@:    addq.w    #4,sp
  634.  
  635.     DOS    _EXIT2
  636.  
  637.  
  638.  
  639. ****    ****
  640. less_mem_err:
  641. call_fpic_keep_less_mem_err:
  642.     moveq.l    #1,d0
  643.     lea.l    less_mem_err_strZ(pc),a0
  644.     bra    TINI_err
  645. tgusemd_err:
  646.     moveq.l    #5,d0
  647.     lea.l    tgusemd_err_strZ(pc),a0
  648.     bra    TINI_err
  649.  
  650. indirect_err:
  651.     moveq.l    #1,d0
  652.     lea.l    indirect_err_strZ(pc),a0
  653.     bra    TINI_err
  654.  
  655. call_fpic_keep_err:
  656.     cmpi.b    #-1,d0
  657.     beq    call_fpic_keep_cannot_read_err
  658.     cmpi.b    #-2,d0
  659.     beq    call_fpic_keep_not_pic_err
  660.     cmpi.b    #-3,d0
  661.     beq    call_fpic_keep_less_mem_err
  662.     bra    call_fpic_keep_not_support_err
  663.  
  664. cannot_read_err:
  665. call_fpic_keep_cannot_read_err:
  666.     moveq.l    #7,d0
  667.     lea.l    fpic_cannot_open_err_strZ(pc),a0
  668.     bra    TINI_err
  669. call_fpic_keep_not_pic_err:
  670.     moveq.l    #2,d0
  671.     lea.l    fpic_not_pic_err_strZ(pc),a0
  672.     bra    TINI_err
  673. call_fpic_keep_not_support_err:
  674.     moveq.l    #2,d0
  675.     lea.l    fpic_not_support_err_strZ(pc),a0
  676.     bra    TINI_err
  677.  
  678. call_fpic_disp_err:
  679.     moveq.l    #9,d0
  680.     lea.l    fpic_illegal_err_strZ(pc),a0
  681.     bra    TINI_err
  682. call_fpic_pos_err:
  683.     moveq.l    #1,d0
  684.     lea.l    fpic_pos_err_strZ(pc),a0
  685.     bra    TINI_err
  686. usage:
  687.     moveq.l    #4,d0
  688.     lea.l    usage_strZ(pc),a0
  689.     bra    TINI_err
  690.  
  691. load_gl3_read_err:
  692.     moveq.l    #10,d0
  693.     lea.l    load_gl3_read_err_strZ(pc),a0
  694.     bra    TINI_err
  695.  
  696. TINI_err:
  697.     movem.l    a1,-(sp)
  698.     lea.l    exit_code(pc),a1
  699.     move.w    d0,(a1)
  700.     move.l    a0,err_message-exit_code(a1)
  701.     movem.l    (sp)+,a1
  702.  
  703.     DOS    _ALLCLOSE
  704.     bra    TINI
  705.  
  706.  
  707.  
  708. *********************************************************
  709. copy_str:        * 文字列をコピー
  710.             * in  :    a0.l = コピー先
  711.             *    a2.l = コピー元(終端は $00 又はスペース又はタブ又は改行又は EOF)
  712.             * out : a0.l = コピー先(終端は $00 )
  713.             *    a2.l = コピー元の次のアドレス
  714.     bsr    skip_space
  715. copy_str_loop:
  716.     move.b    (a2)+,d0
  717.     beq    copy_str_rts
  718.     cmpi.b    #' ',d0
  719.     beq    copy_str_rts
  720.     cmpi.b    #$09,d0
  721.     beq    copy_str_rts
  722.     cmpi.b    #$0d,d0
  723.     beq    copy_str_rts
  724.     cmpi.b    #$0a,d0
  725.     beq    copy_str_rts
  726.     cmpi.b    #$1a,d0
  727.     beq    copy_str_rts
  728.     move.b    d0,(a0)+
  729.     bra    copy_str_loop
  730.  
  731. copy_str_rts:
  732.     clr.b    (a0)
  733.     subq.w    #1,a2
  734.     rts
  735.  
  736.  
  737. ****    ****
  738. dec_to_bin:        * 10進/16進($hhhh)文字列をバイナリ値(ワード)に
  739.             * in  : a2.l = 変換する文字列のアドレス
  740.             * out : d0.l = 変換後の数値
  741.             *    a2.l = 次のアドレス
  742.     movem.l    d1,-(sp)
  743.     bsr    skip_space
  744.     moveq.l    #0,d0
  745.     moveq.l    #0,d1
  746. dec_to_bin_loop:
  747.     move.b    (a2)+,d1
  748.  
  749.     cmpi.b    #'0',d1
  750.     bcs    dec_to_bin_rts
  751.     cmpi.b    #'9',d1
  752.     bhi    dec_to_bin_rts
  753.     subi.b    #'0',d1
  754.     mulu.w    #10,d0
  755.     add.w    d1,d0
  756.     bra    dec_to_bin_loop
  757. dec_to_bin_rts:
  758.     subq.w    #1,a2
  759.     movem.l    (sp)+,d1
  760.     rts
  761.  
  762.  
  763. ****    ****
  764. fdec_to_bin:        * 10進文字列(小数点2桁)をバイナリ値(ロングワード)に
  765.             * in  : a2.l = 変換する文字列のアドレス
  766.             * out : d0.l = 変換後の数値*100 ←ここがポイント
  767.             *    a2.l = 次のアドレス
  768.     movem.l    d1,-(sp)
  769.     bsr    skip_space
  770.     moveq.l    #0,d0
  771.     moveq.l    #0,d1
  772. fdec_to_bin_loop:
  773.     move.b    (a2)+,d1
  774.  
  775.     subi.b    #'0',d1
  776.     bmi    fdec_to_bin_period
  777.     cmpi.b    #9,d1
  778.     bhi    fdec_to_bin_period
  779.     bsr    mulul_d0    * d0.l を10倍
  780.     add.l    d1,d0
  781.     bra    fdec_to_bin_loop
  782.  
  783. fdec_to_bin_period:
  784.     addi.b    #'0',d1
  785.     cmpi.b    #'.',d1
  786.     bne    fdec_to_bin_int_rts
  787.  
  788.     move.b    (a2)+,d1
  789.     subi.b    #'0',d1
  790.     bmi    fdec_to_bin_int_rts
  791.     cmpi.b    #9,d1
  792.     bhi    fdec_to_bin_int_rts
  793.     bsr    mulul_d0    * d0.l を10倍
  794.     add.l    d1,d0
  795.  
  796.     move.b    (a2)+,d1
  797.     subi.b    #'0',d1
  798.     bmi    fdec_to_bin_01_rts
  799.     cmpi.b    #9,d1
  800.     bhi    fdec_to_bin_01_rts
  801.     bsr    mulul_d0    * d0.l を10倍
  802.     add.l    d1,d0
  803.     addq.w    #1,a2
  804.     bra    fdec_to_bin_rts
  805. fdec_to_bin_01_rts:    * 小数点以下1桁
  806.     bsr    mulul_d0    * d0.l を10倍
  807.     addq.w    #1,a2
  808.     bra    fdec_to_bin_rts
  809. fdec_to_bin_int_rts:    * 整数
  810.     bsr    mulul_d0    * d0.l を10倍
  811.     bsr    mulul_d0    * d0.l を10倍
  812. fdec_to_bin_rts:
  813.     subq.w    #1,a2
  814.     movem.l    (sp)+,d1
  815.     rts
  816.  
  817.  
  818. ****    ****
  819. mulul_d0:        * d0.l を10倍する( FLOATn 無しでも動作するように自前で計算)
  820.     movem.l    d1,-(sp)
  821.     add.l    d0,d0
  822.     move.l    d0,d1
  823.     lsl.l    #2,d0
  824.     add.l    d1,d0
  825.     movem.l    (sp)+,d1
  826.     rts
  827.  
  828.  
  829. ****    ****
  830. skip_space:        * スペース、タブを読み飛ばす
  831.             * in  : a2.l = 処理するアドレス
  832.             * out : a2.l = 次のアドレス(スペース、タブの次の文字を指す)
  833.     move.b    (a2)+,d0
  834.     cmpi.b    #' ',d0
  835.     beq    skip_space
  836.     cmpi.b    #$09,d0
  837.     beq    skip_space
  838.     subq.w    #1,a2
  839.     rts
  840.  
  841.  
  842.  
  843. *********************************************************
  844. disp:            * 表示!
  845.     sf.b    C_option_flag2(a5)
  846.  
  847.     IOCS    _ONTIME
  848.     move.l    d0,time_1st(a5)
  849.  
  850.     bsr    set_mouse_cursor
  851.  
  852.     moveq.l    #0,d0
  853.     moveq.l    #0,d1
  854.     bsr    time_wait    * [BREAK] [ESC] チェック
  855.     bmi    disp_rts
  856.  
  857.  
  858.     tst.b    pic_fname(a5)
  859.     beq    disp_malloc_end    * .PIC ファイル名が指定されていなかった場合
  860.     tst.b    file_type(a5)
  861.     bne    disp_malloc    * .GL3 の場合
  862.     tst.b    Y_option_flag(a5)
  863.     bne    disp_malloc    * -Y オプションが指定されている場合
  864.     tst.b    WR_option_flag(a5)
  865.     bne    disp_malloc    * -WR オプションが指定されていた場合
  866.     tst.b    wl_fname(a5)
  867.     beq    disp_malloc_end    * .WL ファイル名が指定されていなかった場合
  868. disp_malloc:
  869.     move.l    virtual_gvram(a5),d0
  870.     bne    @f
  871.     move.l    #512*512*2,-(sp)
  872.     DOS    _MALLOC
  873.     addq.w    #4,sp
  874.     tst.l    d0
  875.     bmi    less_mem_err
  876.     move.l    d0,virtual_gvram(a5)
  877. @@:
  878.     tst.b    file_type(a5)
  879.     bne    1f
  880.  
  881.             * .PIC の場合
  882.     FP_SETB    d0        * .PIC 展開先をメインメモリ上に
  883.     moveq.l    #0,d0
  884.     bsr    call_fpic    * メインメモリ上に .PIC 展開
  885.     bra    2f
  886. 1:            * .GL3 の場合
  887.     movea.l    d0,a0        * .GL3 展開先をメインメモリ上に
  888.     moveq.l    #0,d0
  889.     bsr    load_gl3    * メインメモリ上に .GL3 展開
  890. 2:
  891.     bsr    chroma_key
  892. disp_malloc_end:
  893.  
  894.  
  895.  
  896.     bsr    wl_load_sub    * 表示用/クリア用ワイプライブラリを読み込む
  897.     bsr    reset_mouse_cursor
  898.  
  899.     move.l    time_1st(a5),d0
  900.     move.l    time1(a5),d1
  901.     bsr    time_wait
  902.     bmi    disp_rts
  903.  
  904.     tst.w    zm_track(a5)
  905.     beq    @f
  906.     bsr    zmusic_wait
  907.     bmi    disp_rts    * [BREAK] [ESC] が押された
  908. @@:
  909.     moveq.l    #0,d0
  910.     moveq.l    #0,d1
  911.     bsr    time_wait    * [BREAK] [ESC] チェック
  912.     bmi    disp_rts
  913.  
  914.     suba.l    a1,a1
  915.     IOCS    _B_SUPER
  916.     move.l    d0,-(sp)    **
  917.  
  918.  
  919. ****    ****        画面クリア
  920. disp_clear:
  921.     tst.b    init_screen_1st_flag(a5)
  922.     beq    @f
  923.     bsr    init_screen    * 初回のみ画面初期化
  924.     sf.b    init_screen_1st_flag(a5)
  925.     tst.l    d0        * 画面をクリアしてしまったので
  926.     bmi    disp_clear_end    * -C オプションの処理はなし
  927. @@:
  928.  
  929.             * -C オプションの処理
  930.     tst.b    C_option_flag(a5)
  931.     beq    disp_clear_end
  932.     tst.b    clear_wl_fname(a5)
  933.     bne    disp_clear_wipe
  934.  
  935.             * -C オプションのみ(ワイプライブラリ指定無し)の場合
  936.     bsr    vdisp_fast
  937.     IOCS    _G_CLR_ON
  938.     move.w    #$002f,VCTRL_R03    * 半透明OFF、グラフィック表示ON
  939.     bra    disp_clear_end
  940.  
  941. disp_clear_wipe:    * -Cワイプライブラリ名(ワイプライブラリ指定有り)の場合
  942.     move.w    #$002f,VCTRL_R03    * 半透明OFF、グラフィック表示ON
  943.  
  944.     pea.l    vdisp_fast(pc)
  945.     move.l    clear_speed(a5),-(sp)
  946.     pea.l    GVRAM        * 転送先
  947.     pea.l    TEXTVRAM    * 転送元( $00 の入った512Kバイトのメモリ)
  948.     movea.l    clear_wl_entry(a5),a0
  949.     jsr    (a0)        * 画面ワイプクリア
  950.     lea.l    16(sp),sp
  951.  
  952. disp_clear_end:
  953.  
  954.     moveq.l    #0,d0
  955.     moveq.l    #0,d1
  956.     bsr    time_wait    * [BREAK] [ESC] チェック
  957.     bmi    disp_rts_super
  958.  
  959.  
  960. ****    ****        .PIC 表示
  961. disp_pic:
  962.     tst.b    pic_fname(a5)
  963.     beq    disp_pic_end    * .PIC ファイル名が指定されていなかった場合
  964.  
  965.     tst.b    init_screen_1st_flag(a5)
  966.     beq    @f
  967.     bsr    init_screen    * 初回のみ画面初期化
  968.     sf.b    init_screen_1st_flag(a5)
  969. @@:
  970.     tst.b    wl_fname(a5)
  971.     bne    @f        * .WL ファイル名が指定されていた場合
  972.     tst.b    file_type(a5)
  973.     bne    1f        * .GL3 の場合
  974.     tst.b    Y_option_flag(a5)
  975.     beq    disp_pic_direct    * .WL ファイル名指定なし、-Y オプション指定なしの場合
  976. 1:            * .WL 無しで -Y オプションが指定された場合
  977.             * .GL3 で .WL ファイルが指定されなかった場合
  978.     clr.l    speed(a5)
  979.     lea.l    trans512k(pc),a0
  980.     move.l    a0,wl_entry(a5)
  981. @@:
  982.  
  983.     move.b    square_flag(a5),d0
  984.     tst.b    F_option_flag(a5)
  985.     beq    @f
  986.     move.b    F_option_mode(a5),d0
  987. @@:    bsr    set_mod
  988.  
  989.     pea.l    vdisp_fast(pc)
  990.     move.l    speed(a5),-(sp)
  991.     pea.l    GVRAM
  992.     move.l    virtual_gvram(a5),-(sp)
  993.     movea.l    wl_entry(a5),a0
  994.     jsr    (a0)        * 画面ワイプ表示
  995.     lea.l    16(sp),sp
  996.     move.l    d0,d1
  997.     bra    disp_pic_end
  998.  
  999. disp_pic_direct:    * GVRAM に直接展開( .WL 指定なし、-Y オプションなし)
  1000.     moveq.l    #-1,d0
  1001.     tst.b    F_option_flag(a5)
  1002.     beq    @f
  1003.     move.b    F_option_mode(a5),d0
  1004.     bsr    set_mod
  1005.     moveq.l    #0,d0
  1006. @@:
  1007.             * .PIC の場合
  1008.     FP_SETB    #GVRAM        * .PIC 展開先を GVRAM 上に
  1009.     bsr    call_fpic
  1010.  
  1011. disp_pic_end:
  1012.  
  1013.  
  1014.     tst.b    A_option_flag(a5)
  1015.     beq    disp_aspect_end
  1016.     sf.b    A_option_flag(a5)
  1017.  
  1018.     tst.b    init_screen_1st_flag(a5)
  1019.     beq    @f
  1020.     bsr    init_screen    * 初回のみ画面初期化
  1021.     sf.b    init_screen_1st_flag(a5)
  1022. @@:
  1023.     bsr    aspect
  1024. disp_aspect_end:
  1025.  
  1026.     movea.l    (sp)+,a1    **
  1027.     IOCS    _B_SUPER
  1028.  
  1029.  
  1030.     IOCS    _ONTIME
  1031.     move.l    time0(a5),d1
  1032.     beq    @f
  1033.     bsr    time_wait
  1034.     bra    disp_rts
  1035. @@:
  1036.     tst.l    time1(a5)
  1037.     bne    disp_rts_0
  1038.  
  1039.             * キー入力待ちの処理
  1040.     tst.b    K_option_flag(a5)
  1041.     beq    @f
  1042.  
  1043.     moveq.l    #0,d0
  1044.     moveq.l    #-1,d1
  1045.     bsr    time_wait
  1046.     bra    disp_rts
  1047. @@:
  1048.  
  1049. disp_rts_0:
  1050.     moveq.l    #0,d0
  1051. disp_rts:
  1052.     rts
  1053.  
  1054. disp_rts_super:    * スーパーバイザモード時
  1055.     movea.l    (sp)+,a1    **
  1056.     IOCS    _B_SUPER
  1057.  
  1058.     moveq.l    #-1,d0    * 返り値
  1059.     rts
  1060.  
  1061. *********************************************************
  1062. init_screen:        * 起動時の画面初期化
  1063.             * out : d0.l = 0 : クリア処理有り
  1064.             *         < 0 :  〃 処理無し
  1065.             *        (起動時に 65536 色で無かったため画面をクリアした)
  1066.     movem.l    d1,-(sp)
  1067.  
  1068.     move.w    VCTRL_R03,d0
  1069.     andi.w    #$000f,d0
  1070.     cmpi.w    #$000f,d0    * グラフィック表示OFF?
  1071.     bne    init_screen_other
  1072.  
  1073.     move.w    VCTRL_R01,d0
  1074.     andi.w    #$0007,d0
  1075.     cmpi.w    #3,d0        * 65536 色モード?
  1076.     bne    init_screen_other
  1077.  
  1078.     move.w    CRTC_R20,d0
  1079.     andi.w    #$071f,d0    * 一応
  1080.     cmpi.w    #$0315,d0    * 512x512 65536 色 HIGH モード?
  1081.     beq    init_screen_512
  1082.     cmpi.w    #$0305,d0    * 512x512 65536 色 LOW モード?
  1083.     beq    init_screen_512
  1084.     cmpi.w    #$0316,d0    * 768x512 65536 色 HIGH モード?
  1085.     bne    init_screen_other
  1086.  
  1087. init_screen_768:
  1088.     tst.b    init_screen_1st_flag(a5)
  1089.     beq    @f
  1090.     bsr    vdisp_fast    * 画面をいじる時は必ず待つ(鉄則)
  1091.     bsr    clear_text
  1092. @@:
  1093.     moveq.l    #1,d0
  1094.     bsr    set_mod
  1095.     bsr    init_palet
  1096.     moveq.l    #0,d0
  1097.     bra    init_screen_rts
  1098.  
  1099. init_screen_512:
  1100.     tst.b    init_screen_1st_flag(a5)
  1101.     beq    @f
  1102.     bsr    vdisp_fast    * 画面をいじる時は必ず待つ(鉄則)
  1103.     bsr    clear_text
  1104. @@:
  1105.     moveq.l    #0,d0
  1106.     bsr    set_mod
  1107.     bsr    init_palet
  1108.     moveq.l    #0,d0
  1109.     bra    init_screen_rts
  1110.  
  1111. init_screen_other:
  1112.     andi.w    #$fff0,VCTRL_R03    * グラフィック表示OFF
  1113.     bsr    vdisp_fast
  1114.  
  1115.     move.w    #5,-(sp)
  1116.     move.w    #16,-(sp)    * 512x512 ドット 65536 色
  1117.     DOS    _CONCTRL
  1118.     addq.w    #4,sp
  1119.  
  1120.     bsr    vdisp_fast
  1121.     IOCS    _G_CLR_ON
  1122.  
  1123.     bsr    vdisp_fast
  1124.     bsr    init_palet
  1125.  
  1126.     moveq.l    #-1,d0
  1127.  
  1128. init_screen_rts:
  1129.     move.w    #$002f,VCTRL_R03    * 半透明OFF、グラフィック表示ON
  1130.  
  1131.     movem.l    (sp)+,d1
  1132.     rts
  1133.  
  1134.  
  1135. *********************************************************
  1136.         .offset    0
  1137. CRTCD_R0:    ds.w    1
  1138. CRTCD_R1:    ds.w    1
  1139. CRTCD_R2:    ds.w    1
  1140. CRTCD_R3:    ds.w    1
  1141. CRTCD_R4:    ds.w    1
  1142. CRTCD_R5:    ds.w    1
  1143. CRTCD_R6:    ds.w    1
  1144. CRTCD_R7:    ds.w    1
  1145. CRTCD_R20:    ds.w    1
  1146.     .text
  1147.     .even
  1148. set_mod:        * 画面モード設定
  1149.             * メモリモード/スクエアPIC
  1150.             * /優先順位/スクロール座標を設定
  1151.             * in  : d0.b = 0 : 512x512 / != 0 :768x512
  1152.     movem.l    d1/a0-a1,-(sp)
  1153.  
  1154.     move.w    d0,d1
  1155.     bsr    vdisp_fast    * 画面をいじる時は必ず待つ(鉄則)
  1156.  
  1157.     lea    _512x512_64K_H(pc),a0
  1158.     tst.b    d1
  1159.     beq    @f
  1160.     lea    _768x512_64K_H(pc),a0
  1161. @@:
  1162.     move.b    CRTCD_R20+1(a0),d0
  1163.     andi.w    #%000_11111,d0
  1164.     move.b    CRTM_prw(pc,d0.w),d0
  1165.     move.w    CRTC_R20,d1
  1166.     andi.w    #%000_11111,d1
  1167.     cmp.b    CRTM_prw(pc,d1.w),d0
  1168.     bls    set_mod_low_hi
  1169.  
  1170. set_mod_hi_low:            * 高から低へ
  1171.     lea    CRTC_R01,a1
  1172.     move.w    CRTCD_R20(a0),d0    *
  1173.     move.w    d0,CRTC_R20        * R20
  1174.     move.w    (a0)+,d1        *
  1175.     move.l    (a0)+,(a1)+        * R01-R02
  1176.     move.l    (a0)+,(a1)+        * R03-R04
  1177.     move.l    (a0)+,(a1)+        * R05-R06
  1178.     move.w    (a0)+,(a1)+        * R07
  1179.     move.w    d1,CRTC_R00        * R00
  1180.     lsr.w    #8,d0            *
  1181.     move.w    d0,VCTRL_R01        * メモリモード
  1182.     bra    set_mod_rts
  1183.  
  1184. set_mod_low_hi:            * 低から高へ
  1185.     lea    CRTC_R00,a1
  1186.     move.l    (a0)+,(a1)+        * R00-R01
  1187.     move.l    (a0)+,(a1)+        * R02-R03
  1188.     move.l    (a0)+,(a1)+        * R04-R05
  1189.     move.l    (a0)+,(a1)+        * R06-R07
  1190.     move.w    (a0)+,d0        *
  1191.     move.w    d0,CRTC_R20        * R20
  1192.     lsr.w    #8,d0            *
  1193.     move.w    d0,VCTRL_R01        * メモリモード
  1194.  
  1195. set_mod_rts:
  1196.     move.b    #%1110_0100,VCTRL_R02+1    * 優先順位
  1197.  
  1198.     lea.l    CRTC_R12,a0        * スクロール座標
  1199.     clr.l    (a0)+
  1200.     clr.l    (a0)+
  1201.     clr.l    (a0)+
  1202.     clr.l    (a0)+
  1203.  
  1204.     movem.l    (sp)+,d1/a0-a1
  1205.     rts
  1206.  
  1207.  
  1208.         *    0 1 2 3 4 5 6 7 8 9 A B C D E F
  1209. CRTM_prw:    dc.b    4,2,9,9,9,2,9,9,9,9,9,9,9,9,9,9        *0
  1210.         dc.b    3,1,9,9,9,1,0,9,9,9,9,9,9,9,9,9        *1
  1211.     .even
  1212.  
  1213.  
  1214. *********************************************************
  1215. init_palet:        * 65536 色モードパレットを初期化
  1216.     movem.l    d1-d2,-(sp)
  1217.  
  1218.     moveq.l    #128-1,d0
  1219.     lea    GRPALET,a0
  1220.     moveq.l    #0,d1
  1221.     move.l    #$0001_0001,d1
  1222.     move.l    #$0202_0202,d2
  1223. @@:    move.l    d1,(a0)+
  1224.     add.l    d2,d1
  1225.     dbra    d0,@b
  1226.  
  1227.     movem.l    (sp)+,d1-d2
  1228.     rts
  1229.  
  1230.  
  1231. *********************************************************
  1232. call_fpic:        * 実際に FPIC を呼ぶ
  1233.             * in  : d0.b != 0 : 画面モード設定あり
  1234.     movem.l    d1-d3,-(sp)
  1235.  
  1236.     move.b    d0,d3
  1237.  
  1238.     FP_KEEP    pic_fname(a5)    * .PIC 読み込み
  1239.     tst.l    d0
  1240.     bmi    call_fpic_keep_err
  1241.  
  1242.     move.l    d0,a0        * a0.l =
  1243.  
  1244.     btst.b    #fpf_SQ,fpw_FLAG1(a0)
  1245.     sne.b    square_flag(a5)    * =$00 : 横長PIC / =$ff : スクエアPIC
  1246.  
  1247.  
  1248.     tst.b    L_option_flag(a5)
  1249.     bne    2f
  1250.  
  1251.         * -L オプションなし
  1252.     btst.b    #fpf_XY,fpw_FLAG1(a0)    * .PIC ファイルに表示位置指定があったか?
  1253.     bne    1f
  1254.     moveq.l    #0,d0
  1255.     moveq.l    #0,d1
  1256.     bra    call_fpic_check
  1257. 1:
  1258.     move.w    fpw_X(a0),d0        * ヘッダの座標を使用
  1259.     move.w    fpw_Y(a0),d1
  1260.     bra    call_fpic_check
  1261.  
  1262. 2:        * -L オプションあり
  1263.     move.w    pos_x(a5),d0        * -L オプションの座標を使用
  1264.     move.w    pos_y(a5),d1
  1265.  
  1266. call_fpic_check:    * ここに来る時点で d0.w = x0, d1.w = y0
  1267.  
  1268.             * 512x512 でなければ仮想GVRAMをクリア
  1269.     cmpi.w    #512,fpw_H(a0)
  1270.     bne    1f
  1271.     cmpi.w    #512,fpw_V(a0)
  1272.     beq    2f
  1273. 1:    tst.l    virtual_gvram(a5)
  1274.     beq    2f
  1275.     bsr    clear_virtual_gvram
  1276. 2:
  1277.             * 位置指定範囲外チェック
  1278.     move.w    d0,d2
  1279.     add.w    fpw_H(a0),d2
  1280.     cmpi.w    #512,d2
  1281.     bhi    call_fpic_pos_err
  1282.     move.w    d1,d2
  1283.     add.w    fpw_V(a0),d2
  1284.     cmpi.w    #512,d2
  1285.     bhi    call_fpic_pos_err
  1286.  
  1287.     tst.b    d3
  1288.     beq    @f
  1289.     movem.l    d0/a0,-(sp)
  1290.     move.b    square_flag(a5),d0
  1291.     bsr    set_mod
  1292.     movem.l    (sp)+,d0/a0
  1293. @@:
  1294.     FP_DISP    a0,d0,d1
  1295.     move.l    d0,d1
  1296.     FP_FREE    a0
  1297.  
  1298.     tst.l    d1
  1299.     bmi    call_fpic_disp_err
  1300.  
  1301.     movem.l    (sp)+,d1-d3
  1302.     rts
  1303.  
  1304.  
  1305. *********************************************************
  1306. load_gl3:        * .GL3 を読み込む
  1307.             * in  : d0.b != 0 : 画面モード設定あり
  1308.             *    a0.l = 読み込むアドレス
  1309.     movem.l    d1-d3/a0-a1,-(sp)
  1310.  
  1311.     clr.b    square_flag(a5)
  1312.  
  1313.     tst.b    d0
  1314.     beq    @f
  1315.     movem.l    d0/a0,-(sp)
  1316.     move.b    square_flag(a5),d0
  1317.     bsr    set_mod
  1318.     movem.l    (sp)+,d0/a0
  1319. @@:
  1320.     clr.w    -(sp)        * 読み込み専用
  1321.     pea.l    pic_fname(a5)    * ファイル名
  1322.     DOS    _OPEN
  1323.     addq.w    #6,sp
  1324.     tst.l    d0
  1325.     bmi    load_gl3_read_err
  1326.     move.w    d0,d7        * d7.w = ファイルハンドル
  1327.  
  1328.     move.l    #524288,-(sp)    * 512Kbytes 読み込み
  1329.     pea.l    (a0)
  1330.     move.w    d7,-(sp)
  1331.     DOS    _READ
  1332.     lea.l    10(sp),sp
  1333.     move.l    d0,d1
  1334.  
  1335.     move.w    d7,-(sp)
  1336.     DOS    _CLOSE
  1337.     addq.w    #2,sp
  1338.  
  1339.     tst.l    d1
  1340.     bmi    load_gl3_read_err
  1341.  
  1342.     movem.l    (sp)+,d1-d3/a0-a1
  1343.     rts
  1344.  
  1345.  
  1346. *********************************************************
  1347. time_wait:            * 指定時間待つ( [BREAK] [ESC] 検出有り)
  1348.                 * -K オプション指定時にはその処理も
  1349.                 * in  : d0.l = 計測開始時間(単位 1/100 秒)
  1350.                 *    d1.l = 待つ時間(単位 1/100 秒)
  1351.                 * out : d0.l = -1 ; [BREAK] [ESC] で中断された
  1352.     movem.l    d2,-(sp)
  1353.  
  1354.     move.l    d0,d2
  1355.     add.l    d1,d2
  1356.  
  1357. time_wait_loop:
  1358.     move.w    #$00ff,-(sp)
  1359.     DOS    _INPOUT
  1360.     addq.w    #2,sp
  1361.     tst.w    d0
  1362.     beq    time_wait_not_pressed_key
  1363.  
  1364.             * 何かキーが押された
  1365.     move.w    d0,-(sp)    **
  1366.     clr.w    -(sp)
  1367.     DOS    _KFLUSH
  1368.     addq.w    #2,sp
  1369.     move.w    (sp)+,d0    **
  1370.  
  1371.     cmpi.b    #$1b,d0        * [ESC] が押された?
  1372.     beq    time_wait_abort
  1373.     cmpi.b    #$03,d0        * [BREAK] が押された?
  1374.     beq    time_wait_abort
  1375.  
  1376.     tst.b    K_option_flag(a5)
  1377.     beq    time_wait_next
  1378.     bra    time_wait_rts    * -K オプション指定時にキーが押されたら帰る
  1379.  
  1380. time_wait_not_pressed_key:
  1381.     tst.b    K_option_flag(a5)
  1382.     beq    time_wait_next
  1383.  
  1384.     IOCS    _MS_GETDT
  1385.     tst.b    d0        *
  1386.     bne    time_wait_abort    * 右クリックされたら中断
  1387.     tst.w    d0        *
  1388.     bmi    time_wait_rts    * 左クリックされたら帰る
  1389.  
  1390. time_wait_next:
  1391.     IOCS    _ONTIME
  1392.     cmp.l    d2,d0
  1393.     bcs    time_wait_loop
  1394. time_wait_rts:
  1395.     IOCS    _MS_GETDT
  1396.     tst.w    d0
  1397.     bne    time_wait_rts
  1398.  
  1399.     moveq.l    #0,d0
  1400. time_wait_rts_2:
  1401.     movem.l    (sp)+,d2
  1402.     rts
  1403.  
  1404.  
  1405. time_wait_abort:
  1406.     IOCS    _MS_GETDT
  1407.     tst.w    d0
  1408.     bne    time_wait_abort
  1409.  
  1410.     moveq.l    #-1,d0
  1411.     bra    time_wait_rts_2
  1412.  
  1413.  
  1414. *********************************************************
  1415. zmusic_wait:            * ZMUSIC映像同期モード( [BREAK] [ESC] 検出有り)
  1416.                 * カウンターが指定の値を越えるまで待つ
  1417.                 * out : d0.l = -1 ; [BREAK] [ESC] で中断された
  1418.     movem.l    d1,-(sp)
  1419.  
  1420. zmusic_wait_loop:
  1421.     move.w    #$00ff,-(sp)
  1422.     DOS    _INPOUT
  1423.     addq.w    #2,sp
  1424.     tst.w    d0
  1425.     beq    zmusic_wait_not_pressed_key
  1426.  
  1427.             * 何かキーが押された
  1428.     move.w    d0,-(sp)    **
  1429.     clr.w    -(sp)
  1430.     DOS    _KFLUSH
  1431.     addq.w    #2,sp
  1432.     move.w    (sp)+,d0    **
  1433.  
  1434.     cmpi.b    #$1b,d0        * [ESC] が押された?
  1435.     beq    zmusic_wait_abort
  1436.     cmpi.b    #$03,d0        * [BREAK] が押された?
  1437.     beq    zmusic_wait_abort
  1438.  
  1439.     tst.b    K_option_flag(a5)
  1440.     beq    zmusic_wait_next
  1441.     bra    zmusic_wait_rts    * -K オプション指定時にキーが押されたら帰る
  1442.  
  1443. zmusic_wait_not_pressed_key:
  1444.     tst.b    K_option_flag(a5)
  1445.     beq    zmusic_wait_next
  1446.  
  1447.     IOCS    _MS_GETDT
  1448.     tst.b    d0            *
  1449.     bne    zmusic_wait_abort    * 右クリックされたら中断
  1450.     tst.w    d0            *
  1451.     bmi    zmusic_wait_rts        * 左クリックされたら帰る
  1452.  
  1453. zmusic_wait_next:
  1454.     movea.l    zm_track_work(a5),a0
  1455.     move.l    p_total(a0),d0    * d0.l = トータルカウント
  1456.     cmp.l    zm_counter(a5),d0
  1457.     bcs    zmusic_wait_loop
  1458. zmusic_wait_rts:
  1459.     IOCS    _MS_GETDT
  1460.     tst.w    d0
  1461.     bne    zmusic_wait_rts
  1462.  
  1463.     moveq.l    #0,d0
  1464. zmusic_wait_rts_2:
  1465.     movem.l    (sp)+,d1
  1466.     rts
  1467.  
  1468.  
  1469. zmusic_wait_abort:
  1470.     IOCS    _MS_GETDT
  1471.     tst.w    d0
  1472.     bne    zmusic_wait_abort
  1473.  
  1474.     moveq.l    #-1,d0
  1475.     bra    zmusic_wait_rts_2
  1476.  
  1477.  
  1478. *********************************************************
  1479. wl_load_sub:        * 画面表示用ワイプライブラリ読み込み
  1480.  
  1481.             * まずクリア用ワイプライブラリ
  1482.     tst.b    C_option_flag(a5)
  1483.     beq    wl_load_sub_clear_rts
  1484.  
  1485.     move.l    clear_wl_ptr(a5),-(sp)
  1486.     beq    @f
  1487.     DOS    _MFREE
  1488. @@:    addq.w    #4,sp
  1489.  
  1490.     tst.b    CR_option_flag(a5)
  1491.     beq    @f
  1492.     lea.l    clear_wl_fname(a5),a0
  1493.     bsr    wl_load_sub_random
  1494. @@:
  1495.     moveq.l    #7,d0            * 引き数
  1496.     lea.l    clear_wl_fname(a5),a0    *
  1497.     tst.b    (a0)
  1498.     beq    @f
  1499.     bsr    wl_load        * クリア用ワイプライブラリを読み込む
  1500.     tst.l    d0        * エラー?
  1501.     bmi    wl_load_sub_load_err
  1502.     move.l    a0,clear_wl_ptr(a5)    *
  1503.     move.l    a1,clear_wl_entry(a5)        *
  1504.  
  1505. @@:    move.l    D_option_speed(a5),d0    * 指定値 <= 最大値
  1506.     cmp.l    d0,d1            * なら問題無い
  1507.     bcc    @f
  1508.     tst.b    CR_option_flag(a5)
  1509.     beq    wl_load_sub_speed_err
  1510.     move.l    d1,d0            * -CR オプション付きなら 最大値 = 指定値
  1511. @@:    move.l    d0,clear_speed(a5)
  1512.  
  1513. wl_load_sub_clear_rts:
  1514.  
  1515.  
  1516.             * 次に表示用ワイプライブラリ
  1517.     tst.b    wl_fname(a5)
  1518.     bne    wl_load_sub_fname
  1519.     tst.b    WR_option_flag(a5)
  1520.     bne    wl_load_sub_fname
  1521.             * .wl ファイル名が指定されていなかった時
  1522.     tst.l    speed(a5)
  1523.     bne    wl_load_sub_speed_err
  1524.     bra    wl_load_sub_rts
  1525.  
  1526. wl_load_sub_fname:
  1527.     move.l    wl_ptr(a5),-(sp)
  1528.     beq    @f
  1529.     DOS    _MFREE
  1530. @@:    addq.w    #4,sp
  1531.  
  1532.     tst.b    WR_option_flag(a5)
  1533.     beq    @f
  1534.     lea.l    wl_fname(a5),a0
  1535.     bsr    wl_load_sub_random
  1536. @@:
  1537.     moveq.l    #7,d0        * 引き数
  1538.     lea.l    wl_fname(a5),a0    *
  1539.     bsr    wl_load        * 表示用ワイプライブラリを読み込む
  1540.     tst.l    d0        * エラー?
  1541.     bmi    wl_load_sub_load_err
  1542.     move.l    a0,wl_ptr(a5)    *
  1543.     move.l    a1,wl_entry(a5)        *
  1544.  
  1545.     move.l    S_option_speed(a5),d0    * 指定値 <= 最大値
  1546.     cmp.l    d0,d1            * なら問題無い
  1547.     bcc    @f
  1548.     tst.b    WR_option_flag(a5)
  1549.     beq    wl_load_sub_speed_err
  1550.     move.l    d1,d0            * -WR オプション付きなら 最大値 = 指定値
  1551. @@:    move.l    d0,speed(a5)
  1552.  
  1553. wl_load_sub_rts
  1554.     moveq.l    #0,d0
  1555.     rts
  1556.  
  1557. wl_load_sub_speed_err:
  1558.     moveq.l    #12,d0
  1559.     lea.l    wl_load_sub_speed_err_strZ(pc),a0
  1560.     bra    TINI_err
  1561.  
  1562.  
  1563. ****    ****
  1564. wl_load_sub_load_err:
  1565.     cmpi.l    #-2,d0
  1566.     beq    wl_load_sub_less_mem_err
  1567.     cmpi.l    #-3,d0
  1568.     beq    wl_load_sub_not_wl_err
  1569.  
  1570.     moveq.l    #10,d0
  1571.     lea.l    wl_load_sub_open_err_strZ(pc),a0
  1572.     bra    TINI_err
  1573.  
  1574. wl_load_sub_less_mem_err:
  1575.     moveq.l    #14,d0
  1576.     lea.l    wl_load_sub_less_mem_err_strZ(pc),a0
  1577.     bra    TINI_err
  1578.  
  1579. wl_load_sub_not_wl_err:
  1580.     moveq.l    #14,d0
  1581.     lea.l    wl_load_sub_not_wl_err_strZ(pc),a0
  1582.     bra    TINI_err
  1583.  
  1584.  
  1585. ****    ****
  1586. wl_load_sub_random:
  1587.  
  1588.     .offset    -92-54
  1589. wc_path:    .ds.b    92
  1590. wc_files_buf:    .ds.b    54
  1591.     .text
  1592.  
  1593.     link    a6,#-92-54
  1594.     movem.l    d1-d7/a1-a5,-(sp)
  1595.     move.l    a0,d5            * d5.l =
  1596.  
  1597.  
  1598.     move.l    #23*1024,-(sp)
  1599.     DOS    _MALLOC
  1600.     addq.w    #4,sp
  1601.     tst.l    d0
  1602.     bmi    less_mem_err
  1603.     move.l    d0,a3            * a3.l =
  1604.     move.l    d0,a4            * a4.l =
  1605.  
  1606.  
  1607.     lea.l    wc_path(a6),a5        * a5.l =
  1608.     lea.l    wild_wl_strZ(pc),a0    * '*.wl'
  1609. @@:    move.b    (a0)+,(a5)+
  1610.     bne    @b
  1611.  
  1612.     move.w    #32,-(sp)
  1613.     pea.l    wc_path(a6)
  1614.     pea.l    wc_files_buf(a6)
  1615.     DOS    _FILES
  1616.     lea.l    10(sp),sp
  1617.     tst.l    d0
  1618.     beq    wl_load_sub_random_found
  1619.  
  1620.             * 自分自身のパス名を付けてもう一度
  1621.     lea.l    wc_path(a6),a5        * a5.l =
  1622.     DOS    _GETPDB
  1623.     movea.l    d0,a0
  1624.     adda.w    #$80-$10,a0
  1625. @@:    move.b    (a0)+,(a5)+
  1626.     bne    @b
  1627.     subq.w    #1,a5
  1628.     lea.l    wild_wl_strZ(pc),a0    * '*.wl'
  1629. @@:    move.b    (a0)+,(a5)+
  1630.     bne    @b
  1631.  
  1632.     move.w    #32,-(sp)
  1633.     pea.l    wc_path(a6)        * パス名+'*.wl'
  1634.     pea.l    wc_files_buf(a6)
  1635.     DOS    _FILES
  1636.     lea.l    10(sp),sp
  1637.     tst.l    d0
  1638.     beq    wl_load_sub_random_found
  1639.  
  1640.             * 環境変数 WL_path のパス名を付けてもう一度
  1641.     lea.l    wc_path(a6),a5        * a5.l =
  1642.  
  1643.     pea.l    (a5)
  1644.     clr.l    -(sp)
  1645.     pea.l    WL_path_strZ(pc)
  1646.     DOS    _GETENV
  1647.     lea.l    12(sp),sp
  1648.     tst.l    d0
  1649.     bmi    wl_load_sub_random_no_wl_err
  1650. @@:    tst.b    (a5)+
  1651.     bne    @b
  1652.     subq.w    #1,a5
  1653.     lea.l    wild_wl_strZ(pc),a0    * '*.wl'
  1654. @@:    move.b    (a0)+,(a5)+
  1655.     bne    @b
  1656.  
  1657.     move.w    #32,-(sp)
  1658.     pea.l    wc_path(a6)        * パス名+'*.wl'
  1659.     pea.l    wc_files_buf(a6)
  1660.     DOS    _FILES
  1661.     lea.l    10(sp),sp
  1662.     tst.l    d0
  1663.     bmi    wl_load_sub_random_no_wl_err
  1664.  
  1665.  
  1666. wl_load_sub_random_found:
  1667.     moveq.l    #1,d6        * d6.l = 見つけた .wl ファイルの数
  1668. wl_load_sub_random_loop:
  1669.     movea.l    a4,a1
  1670.     lea.l    wc_files_buf+30(a6),a0
  1671. @@:    move.b    (a0)+,(a1)+
  1672.     bne    @b
  1673.     lea.l    23(a4),a4
  1674.  
  1675.     pea.l    wc_files_buf(a6)
  1676.     DOS    _NFILES
  1677.     addq.w    #4,sp
  1678.     tst.l    d0
  1679.     bmi    wl_load_sub_random_rts
  1680.     addq.w    #1,d6
  1681.     cmpi.w    #1024,d6
  1682.     bcs    wl_load_sub_random_loop
  1683. wl_load_sub_random_rts:
  1684.  
  1685.  
  1686.     IOCS    _ONTIME        * 乱数の種に使用
  1687.     add.l    d1,d0
  1688.     swap.w    d0        *
  1689.     clr.w    d0        * オーバーフロー防止
  1690.     swap.w    d0        *
  1691.     divu.w    d6,d0
  1692.     swap.w    d0
  1693.     mulu.w    #23,d0
  1694.  
  1695.     lea.l    (a3,d0.w),a0
  1696.     subq.w    #5,a5        * '*.wl',0 で5文字
  1697. @@:    move.b    (a0)+,(a5)+
  1698.     bne    @b
  1699.  
  1700.     lea.l    wc_path(a6),a0
  1701.     movea.l    d5,a1
  1702. @@:    move.b    (a0)+,(a1)+
  1703.     bne    @b
  1704.  
  1705.     pea.l    (a3)
  1706.     DOS    _MFREE
  1707.     addq.w    #4,sp
  1708.  
  1709.     movem.l    (sp)+,d1-d7/a1-a5
  1710.     moveq.l    #0,d7
  1711.     unlk    a6
  1712.     rts
  1713.  
  1714.  
  1715. wl_load_sub_random_no_wl_err:
  1716.     moveq.l    #10,d7
  1717.     lea.l    no_wl_err_strZ(pc),a0
  1718.     bra    TINI_err
  1719.  
  1720.  
  1721. *********************************************************
  1722. clear_text:        * テキスト画面クリア(スーパーで呼ぶこと)
  1723.     movem.l    d1/a1,-(sp)
  1724.  
  1725.     lea.l    CRTC_R21,a1        * a1.l =
  1726.  
  1727.     move.w    (a1),-(sp)        **
  1728.     andi.w    #$fdff,(a1)        * ビットマスクオフ
  1729.     ori.w    #$01ff,(a1)        * ラスターコピー同時アクセスオン
  1730.  
  1731.     lea.l    TEXTVRAM,a0
  1732.     moveq.l    #0,d0
  1733.     moveq.l    #128*4/16-1,d1
  1734. @@:    move.l    d0,(a0)+        * テキスト4ラスター分だけ自力でクリア
  1735.     move.l    d0,(a0)+
  1736.     move.l    d0,(a0)+
  1737.     move.l    d0,(a0)+
  1738.     dbra    d1,@b
  1739.  
  1740.     lea.l    GPIP_DATA,a0        * a0.l =
  1741.  
  1742. *    move.w    sr,-(sp)        * 本当は割り込み停止した方がよい
  1743. *    ori.w    #$0700,sr        * (が、音楽演奏に影響を与えてしまうので)
  1744.     moveq.l    #1,d0
  1745.     move.w    #256-1,d1
  1746. clear_text_raster_copy_loop
  1747.     tst.b    (a0)
  1748.     bmi    clear_text_raster_copy_loop
  1749. @@:    tst.b    (a0)
  1750.     bpl    @b
  1751.     move.w    d0,2(a1)        * CRTC_R22 水平表示→同期期間になった瞬間に設定
  1752.     bset.b    #3,CRTC_PORT+1        * ラスターコピー開始
  1753.     addq.w    #1,d0
  1754.     dbra    d1,clear_text_raster_copy_loop
  1755.  
  1756.  
  1757. @@:    tst.b    (a0)
  1758.     bmi    @b
  1759. @@:    tst.b    (a0)
  1760.     bpl    @b            * 水平表示→同期期間になった瞬間に
  1761.     bclr.b    #3,CRTC_PORT+1        * ラスターコピー停止
  1762.  
  1763. *    move.w    (sp)+,sr
  1764.     move.w    (sp)+,(a1)        **
  1765.  
  1766.     movem.l    (sp)+,d1/a1
  1767.     rts
  1768.  
  1769.  
  1770. *********************************************************
  1771. clear_virtual_gvram:        * 仮想VRAMをクリア
  1772.     movem.l    d0-d7/a0-a1,-(sp)
  1773.  
  1774.     movea.l    virtual_gvram(a5),a0
  1775.     adda.l    #512*512*2,a0
  1776.     moveq.l    #0,d1
  1777.     moveq.l    #0,d2
  1778.     moveq.l    #0,d3
  1779.     moveq.l    #0,d4
  1780.     moveq.l    #0,d5
  1781.     moveq.l    #0,d6
  1782.     moveq.l    #0,d7
  1783.     movea.l    d1,a1
  1784.  
  1785.     move.w    #512*512*2/4/8/8-1,d0
  1786. @@:
  1787.     movem.l    d1-d7/a1,-(a0)
  1788.     movem.l    d1-d7/a1,-(a0)
  1789.     movem.l    d1-d7/a1,-(a0)
  1790.     movem.l    d1-d7/a1,-(a0)
  1791.     movem.l    d1-d7/a1,-(a0)
  1792.     movem.l    d1-d7/a1,-(a0)
  1793.     movem.l    d1-d7/a1,-(a0)
  1794.     movem.l    d1-d7/a1,-(a0)
  1795.     dbra    d0,@b
  1796.  
  1797.     movem.l    (sp)+,d0-d7/a0-a1
  1798.     rts
  1799.  
  1800.  
  1801.  
  1802. *********************************************************
  1803. aspect:            * アスペクト比調整用画像表示
  1804.     movem.l    d1-d3/a1,-(sp)
  1805.  
  1806.     lea.l    aspect_box_1(pc),a1
  1807.     IOCS    _FILL
  1808.     lea.l    aspect_box_2(pc),a1
  1809.     IOCS    _FILL
  1810.     lea.l    aspect_circle(pc),a1
  1811.     IOCS    _CIRCLE
  1812.     lea.l    aspect_line_1(pc),a1
  1813.     IOCS    _LINE
  1814.     lea.l    aspect_line_2(pc),a1
  1815.     IOCS    _LINE
  1816.     lea.l    aspect_hv_strZ(pc),a0
  1817.     lea.l    aspect_hv(pc),a1
  1818.     move.l    a0,4(a1)
  1819.     IOCS    _SYMBOL
  1820.     lea.l    aspect_ion_std_strZ(pc),a0
  1821.     lea.l    aspect_ion_std(pc),a1
  1822.     move.l    a0,4(a1)
  1823.     IOCS    _SYMBOL
  1824.  
  1825.     moveq.l    #0,d1
  1826.     moveq.l    #0,d2
  1827.     moveq.l    #32-1,d3
  1828.     lea.l    aspect_gray_scale_1(pc),a1
  1829. @@:    move.w    d1,2(a1)    * Y0
  1830.     addi.w    #16,d1
  1831.     move.w    d1,6(a1)    * Y1
  1832.     move.w    d2,8(a1)    * 色
  1833.     IOCS    _FILL
  1834.     addi.w    #1<<11+1<<6+1<<1,d2
  1835.     dbra    d3,@b
  1836.  
  1837.     moveq.l    #0,d1
  1838.     move.w    #31<<11+31<<6+31<<1,d2
  1839.     moveq.l    #32-1,d3
  1840.     lea.l    aspect_gray_scale_2(pc),a1
  1841. @@:    move.w    d1,2(a1)    * Y0
  1842.     addi.w    #16,d1
  1843.     move.w    d1,6(a1)    * Y1
  1844.     move.w    d2,8(a1)    * 色
  1845.     IOCS    _FILL
  1846.     subi.w    #1<<11+1<<6+1<<1,d2
  1847.     dbra    d3,@b
  1848.  
  1849.     moveq.l    #0,d0
  1850.  
  1851.     movem.l    (sp)+,d1-d3/a1
  1852.     rts
  1853.  
  1854.  
  1855. *********************************************************
  1856. set_mouse_cursor:    * マウスカーソルの処理
  1857.     tst.b    M_option_flag(a5)
  1858.     beq    @f
  1859.  
  1860.     movem.l    d1/a1,-(sp)
  1861.     IOCS    _MS_CURGT
  1862.     move.l    d0,d1
  1863.     IOCS    _MS_INIT
  1864.     IOCS    _MS_CURST
  1865.     IOCS    _MS_CURON
  1866.     lea.l    mouse_table(pc),a1
  1867.     IOCS    _MS_SEL2
  1868.     movem.l    (sp)+,d1/a1
  1869. @@:
  1870.     rts
  1871.  
  1872.  
  1873. reset_mouse_cursor:    * マウスカーソルの処理
  1874.     IOCS    _MS_CUROF
  1875.     tst.b    M_option_flag(a5)
  1876.     beq    @f
  1877.  
  1878.     movem.l    d1,-(sp)
  1879.     moveq.l    #0,d1
  1880.     IOCS    _MS_SEL
  1881.     movem.l    (sp)+,d1
  1882. @@:
  1883.     rts
  1884.  
  1885.  
  1886. *********************************************************
  1887. chroma_key:        * クロマキー合成
  1888.     tst.b    Y_option_flag(a5)
  1889.     beq    chroma_key_rts
  1890.  
  1891.     movem.l    d1/a1,-(sp)
  1892.  
  1893.     suba.l    a1,a1
  1894.     IOCS    _B_SUPER
  1895.     move.l    d0,-(sp)        **
  1896.  
  1897.     lea.l    GVRAM,a0        * a0.l = 転送元
  1898.     movea.l    virtual_gvram(a5),a1    * a1.l = 転送先
  1899.     move.l    #512*512,d1
  1900. chroma_key_loop:
  1901.     tst.w    (a1)            * 転送先が透明?
  1902.     bne    chroma_key_skip
  1903.     move.w    (a0)+,(a1)+
  1904.     bra    chroma_key_next
  1905. chroma_key_skip:
  1906.     addq.w    #2,a0
  1907.     addq.w    #2,a1
  1908. chroma_key_next:
  1909.     subq.l    #1,d1
  1910.     bne    chroma_key_loop
  1911.  
  1912.     movea.l    (sp)+,a1
  1913.     IOCS    _B_SUPER
  1914.  
  1915.     movem.l    (sp)+,d1/a1
  1916. chroma_key_rts:
  1917.     rts
  1918.  
  1919.  
  1920. *********************************************************
  1921. trans512k:        * .wl ファイル名が指定されていなかった時の
  1922.             * 単純転送ルーチン
  1923.     link    a6,#0
  1924.     movem.l    d1-d7/a0-a2,-(sp)
  1925.  
  1926. *    move.l    _speed(a6),d0        * 速度が負の時は
  1927. *    bmi    std_ask            * 速度設定可能範囲問い合わせ
  1928. *    bne    std_err            * 速度が設定範囲外
  1929.  
  1930.     movea.l    _source_ptr(a6),a0    * a0.l = 転送元アドレス
  1931.     movea.l    _dest_ptr(a6),a1    * a1.l = 転送先アドレス
  1932.  
  1933.     move.w    #512*(512/64)-1,d7
  1934. @@:    movem.l    (a0)+,d0-d6/a2
  1935.     movem.l    d0-d6/a2,(a1)
  1936.     movem.l    (a0)+,d0-d6/a2
  1937.     movem.l    d0-d6/a2,32*1(a1)
  1938.     movem.l    (a0)+,d0-d6/a2
  1939.     movem.l    d0-d6/a2,32*2(a1)
  1940.     movem.l    (a0)+,d0-d6/a2
  1941.     movem.l    d0-d6/a2,32*3(a1)
  1942.     lea.l    32*4(a1),a1
  1943.     dbra    d7,@b
  1944.  
  1945.     moveq.l    #0,d0
  1946. std_rts:
  1947.     movem.l    (sp)+,d1-d7/a0-a2
  1948.     unlk    a6
  1949.     rts
  1950.  
  1951. *std_err:
  1952. *    moveq.l    #-1,d0
  1953. *    bra    std_rts
  1954.  
  1955.  
  1956. *std_ask:
  1957. *    moveq.l    #0,d0
  1958. *    bra    std_rts
  1959.  
  1960.  
  1961. *********************************************************
  1962. vdisp_fast:
  1963.  
  1964. @@:    btst.b    #4,GPIP_DATA
  1965.     beq    @b
  1966. @@:    btst.b    #4,GPIP_DATA
  1967.     bne    @b
  1968.  
  1969.     rts
  1970.  
  1971.  
  1972. *********************************************************
  1973.  
  1974.     .data
  1975. usage_strZ:
  1976.     .dc.b    'PICファイルワイプローダー    Xpicw.r ver1.10',$0d,$0a
  1977.     .dc.b    '        programmed by Mitsuky    < FreeSoftware >',$0d,$0a
  1978.     .dc.b    $0d,$0a
  1979.     .dc.b    '使用法 : Xpicw [option] PICファイル名[.PIC]',$0d,$0a
  1980.     .dc.b    '    PIC/GL3ファイルをワイプ表示します。',$0d,$0a
  1981.     .dc.b    '    ワイプライブラリ(拡張子 .WL )に対応しています。',$0d,$0a
  1982.     .dc.b    $0d,$0a
  1983.     .dc.b    '[option]',$0d,$0a
  1984.     .dc.b    '-Wワイプライブラリ名[.WL]',$0d,$0a
  1985.     .dc.b    '    : ワイプパターンを指定。 -WR でランダム。',$0d,$0a
  1986.     .dc.b    '-S[数値] : ワイプ速度',$0d,$0a
  1987.     .dc.b    '-C[ワイプライブラリ名[.WL]]',$0d,$0a
  1988.     .dc.b    '    : クリアワイプパターンを指定。 -CR でランダム。',$0d,$0a
  1989.     .dc.b    '-D[数値] : クリア速度',$0d,$0a
  1990.     .dc.b    '-L[X][,Y] : ロード位置指定',$0d,$0a
  1991.     .dc.b    '-M    : ファイル読み込み中、マウスカーソルをアニメーションします。',$0d,$0a
  1992.     .dc.b    '-K    : 表示後キー入力待ちします',$0d,$0a
  1993.     .dc.b    '-T[数値0][,数値1]',$0d,$0a
  1994.     .dc.b    '    : 表示後に [数値0] だけ待ちます',$0d,$0a
  1995.     .dc.b    '    [数値1] を指定すると表示前に [数値1] だけ待ちます',$0d,$0a
  1996.     .dc.b    '    単位は秒(小数点以下2桁まで指定可能)です',$0d,$0a
  1997.     .dc.b    '-Z[数値0,数値1]',$0d,$0a
  1998.     .dc.b    '    : ZMUSIC映像同期モード',$0d,$0a
  1999.     .dc.b    '    トラック [数値0] のカウンターが [数値1] を越えた時にワイプを開始します',$0d,$0a
  2000.     .dc.b    '-Iインダイレクトファイル名',$0d,$0a
  2001.     .dc.b    '    : インダイレクトファイルを読み込んで表示します',$0d,$0a
  2002.     .dc.b    '-A    : アスペクト比調整用画像を表示します',$0d,$0a
  2003.     .dc.b    '-F[数値] : 強制的に横長(数値=0)または正方形(数値=1)モードで表示',$0d,$0a
  2004.     .dc.b    '-N    : カーソル非表示のまま終了します',$0d,$0a
  2005.     .dc.b    0
  2006. tgusemd_err_strZ:
  2007.     .dc.b    'グラフィック画面が使用できません',$0d,$0a
  2008.     .dc.b    0
  2009. indirect_err_strZ:
  2010.     .dc.b    'インダイレクトファイルがオープンできません',$0d,$0a
  2011.     .dc.b    0
  2012. wl_load_sub_not_wl_err_strZ:
  2013.     .dc.b    'このファイルはワイプライブラリではありません',$0d,$0a
  2014.     .dc.b    0
  2015. wl_load_sub_open_err_strZ:
  2016.     .dc.b    'ワイプライブラリがオープンできません',$0d,$0a
  2017.     .dc.b    0
  2018. fpic_cannot_open_err_strZ:
  2019.     .dc.b    '.PIC ファイルがオープンできません',$0d,$0a
  2020.     .dc.b    0
  2021. fpic_not_pic_err_strZ:
  2022.     .dc.b    '.PIC ファイルではありません',$0d,$0a
  2023.     .dc.b    0
  2024. fpic_not_support_err_strZ:
  2025.     .dc.b    '32768/65536 色 .PIC ファイル以外は表示できません',$0d,$0a
  2026.     .dc.b    0
  2027. fpic_illegal_err_strZ:
  2028.     .dc.b    'この .PIC ファイルは壊れています',$0d,$0a
  2029.     .dc.b    0
  2030. fpic_pos_err_strZ:
  2031.     .dc.b    '位置指定が範囲外です',$0d,$0a
  2032.     .dc.b    0
  2033. less_mem_err_strZ:
  2034. wl_load_sub_less_mem_err_strZ:
  2035.     .dc.b    'メモリが足りません',$0d,$0a
  2036.     .dc.b    0
  2037. no_wl_err_strZ:
  2038.     .dc.b    'ワイプライブラリが一つもありません',$0d,$0a
  2039.     .dc.b    0
  2040. wl_load_sub_speed_err_strZ:
  2041.     .dc.b    '-S オプションの値が不正です',$0d,$0a
  2042.     .dc.b    0
  2043. no_zmusic_err_strZ:
  2044.     .dc.b    '-Z オプションはZMUSICを常駐させてから使用して下さい',$0d,$0a
  2045.     .dc.b    0
  2046. load_gl3_read_err_strZ:
  2047.     .dc.b    '.GL3 ファイルがオープンできません',$0d,$0a
  2048.     .dc.b    0
  2049.  
  2050. SLASH_strZ:
  2051.     .dc.b    'SLASH',0
  2052. wild_wl_strZ:
  2053.     .dc.b    '*.WL',0
  2054. WL_path_strZ:
  2055.     .dc.b    'WL_path',0
  2056.  
  2057.  
  2058.     .even
  2059. mouse_table:
  2060.     .dc.w    1,2,3,-1
  2061. aspect_box_1:
  2062.     .dc.w    0,0,511,511,GRAY0,$ffff
  2063. aspect_box_2:
  2064.     .dc.w    256-200*5/7,256-200,256+200*5/7,256+200,GRAY1,$ffff
  2065. aspect_circle:
  2066.     .dc.w    256,256,200,GRAY0,0,360,256*7/5+1
  2067. aspect_line_1:
  2068.     .dc.w    256,0,256,511,GRAY0,$ffff
  2069. aspect_line_2:
  2070.     .dc.w    0,256,511,256,GRAY0,$ffff
  2071. aspect_hv:
  2072.     .dc.w    (512-9*8)/2,20
  2073.     .dc.l    0        * aspect_hv_strZ が後で入る
  2074.     .dc.b    1,1
  2075.     .dc.w    GRAY1
  2076.     .dc.b    1,0
  2077. aspect_ion_std:
  2078.     .dc.w    (512-27*8)/2,512-36
  2079.     .dc.l    0        * aspect_ion_std_strZ が後で入る
  2080.     .dc.b    1,1
  2081.     .dc.w    GRAY1
  2082.     .dc.b    1,0
  2083. aspect_hv_strZ:
  2084.     .dc.b    'H:V = 7:5',0
  2085. aspect_ion_std_strZ:
  2086.     .dc.b    'ion project standard aspect',0
  2087.  
  2088.     .even
  2089. aspect_gray_scale_1:
  2090.     .dc.w    0,0,(512-400*5/7)/2-(512-400)/2*5/7,16,$fffe        * X0/Y0/X1/Y1/色
  2091. aspect_gray_scale_2:
  2092.     .dc.w    512-((512-400*5/7)/2-(512-400)/2*5/7),0,511,16,$fffe    * X0/Y0/X1/Y1/色
  2093.  
  2094.  
  2095. _768x512_64K_H:    dc.w    137,14,44,108,567,5,40,552,%011_000_10110
  2096. _512x512_64K_H:    dc.w    91,9,17,81,567,5,40,552,%011_000_10101
  2097.  
  2098.  
  2099.  
  2100.  
  2101. *    .data セクションに取るワーク( a5.l = 0 でも使える)
  2102.  
  2103. exit_code:
  2104.     .ds.w    1
  2105. err_message:
  2106.     .ds.l    1
  2107.